home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
comm
/
ca29_4.zip
/
TALKER.CMD
< prev
next >
Wrap
OS/2 REXX Batch file
|
1991-06-11
|
10KB
|
349 lines
S29 = "Talker ver 1.1 " ; 20 chars long
S28 = "talker.ovl" ; Our overlay file
S27 = "pc-vco.exc" ; Our exception file
ON ESCAPE GOSUB Esc_Exit ; ESC exit
;
; ----- Talker: Scripted interface to VOICE.EXE
;
; R.McG; 3/90, Chicago
; ----------------------------------------------------------------
; Usages:
; S29 -----> Legend line
; S28 -----> Our own overlay file name
; S27 -----> Our exception file
; S26 -----> Previous overlay file name (or null)
; S25 -----> Previous overlay entry point (or NONE)
;
; -----------------------------------------------------------------------
;
; Initialization
;
; Initial values
;
LEGEND S29 ; Display ourselves
S26 = "_OVERLAY" ; Save previous overlay, if any
S25 = "_OVENTRY" ; Save previous overlay entry point
;
; Set-up the overlay (our interface to VOICE.EXE).
; .. define an end-entry pt of '9' at the same time
;
OVERLAY S28 9 ; Load our overlay (end entry pt = 9)
IF FAILED ; Stop here if can't load overlay
MESS "!Cannot overlay file: "*S28*"!"
GOTO Exit
ENDIF
;
; Use the overlay to 'open' the driver
;
SCALL 6,N0 ; Entry addr 6 -> open_talk
IF NOT ZERO N0 ; If anything but zero rtnd
MESS "!Cannot open voice driver!"
IF NOT ISFILE "voice.exe" MESS "!VOICE.EXE must be on current subdir!"
GOTO Exit
ENDIF
;
; Load an exception file, if its present
;
SCALL 12,S27,N0 ; Entry addr 12 -> Load exception file
IF NOT ZERO N0 ; If anything but zero rtnd
MESS "!Exception file load error: "*N0*" using: "*S27*"!"
ENDIF ; Not fatal error
GOTO Loop ; And start
;
; Script termination
;
Exit:
IF OVERLAY SCALL 9 ; Entry addr 9 -> Close voice driver
OVERLAY CLEAR ; Clear our own
IF NOT NULL S26 ; If there was a previous,
OVERLAY S26 S25 ; .. replace it and its end action
ENDIF
EXIT
;
; Escape pressed
;
Esc_Exit:
S0 = "Do you wish to terminate TALKER?"
GOSUB Ask_YN ; Prompt
IF FAILED RETURN ; "N" -> continue
GOTO Exit ; Terminate
;
; Wait for something
;
Loop:
WHILE FKEY or NOT RECEIVE ; While nothing being received
IF FKEY GOTO Fkey ; Skip if a func key pending
ENDWHILE ; .. loop to make kbd fast
RGET S0 80 10 ; Get 80 chars - wait up to 10 secs
IF FAILED GOTO Loop ; IF nothing received, Loop
SCALL 0,S0 ; Pass buffer to the driver
IF NOT FULL GOTO Loop ; If not full rcv buffer
;
; Flush the rcv buffer
;
LEGEND S29*"Flushing buffer" ; Change legend
WHILE FULL ; While buffer full (host xoffed)
RGET S0 80 30 ; Read a line and display, no voice
ENDWHILE ;
LEGEND S29 ; Replace legend
GOTO Loop ; And loop
;
; Function key pending
;
Fkey:
KEYGET S0 ; Read the function key
SWITCH S0
CASE "2E00" ; Alt-C
CLEAR (text) ; Perform
LEGEND S29 ; Repaint legend
ENDCASE
CASE "1200" ; Alt-E
GOTO Echo
ENDCASE
CASE "2C00" ; Alt-Z
GOTO Mask
ENDCASE
CASE "2600" ; Alt-L
GOTO ScrSize
ENDCASE
CASE "2300" ; Alt-H
HANGUP ; perform
ENDCASE
CASE "2200" ; Alt-G
GOTO Blnkln
ENDCASE
CASE "2D00" ; Alt-X
GOTO EndPgm
ENDCASE
CASE "7500" ; Ctl-End
BREAK ; Perform
ENDCASE
CASE "7200" ; Ctl-PrtSc
GOTO Printer
ENDCASE
CASE "7800" ; Alt-1
MACRO 1 ; Perform
ENDCASE
CASE "7900" ; Alt-2
MACRO 2 ; Perform
ENDCASE
CASE "7A00" ; Alt-3
MACRO 3 ; Perform
ENDCASE
CASE "7B00" ; Alt-4
MACRO 4 ; Perform
ENDCASE
CASE "7C00" ; Alt-5
MACRO 5 ; Perform
ENDCASE
CASE "7D00" ; Alt-6
MACRO 6 ; Perform
ENDCASE
CASE "7E00" ; Alt-7
MACRO 7 ; Perform
ENDCASE
CASE "7F00" ; Alt-8
MACRO 8 ; Perform
ENDCASE
CASE "8000" ; Alt-9
MACRO 9 ; Perform
ENDCASE
CASE "8100" ; Alt-0
MACRO 0 ; Perform
ENDCASE
CASE "4100" ; F7
GOTO Log
ENDCASE
CASE "4300" ; F9
GOTO LogHold
ENDCASE
CASE "4400" ; F10
GOSUB Help ; Note uncharacteristic GOSUB
ENDCASE
CASE "7100" ; Alt-F10
SHELL ; Shell to DOS
ENDCASE
;
; Other keypresses are unrecognized
;
DEFAULT
SOUND 100,100 ; Signal error
ENDCASE
ENDSWITCH
GOTO Loop ; And continue
;
; End pgm
;
EndPgm:
SET TTHRU ON ; Inhibit type-through
STACK "^@-" ; Stack another Alt-X
GOTO Exit ; End script (and COM-AND)
;
; Toggle echo
;
Echo:
IF STRCMP "_DUPL" "HALF" ; Test current setting
SET DUPLEX FULL ; .. toggle
ELSE SET DUPLEX HALF ; .. toggle
GOTO Loop ; And continue
;
; Toggle mask
;
Mask:
IF STRCMP "_MASK" "ON " ; Test current setting
SET MASK OFF ; .. toggle
ELSE SET MASK ON ; .. toggle
GOTO Loop ; And continue
;
; Toggle screen size
;
ScrSize:
IF GT "_SSIZ" 25
SET 25 ; .. toggle
ELSE SET 43 ; .. toggle
LEGEND S29 ; Repaint legend
GOTO Loop ; And continue
;
; Toggle printer
;
Printer:
IF STRCMP "_PRINT" "ON " ; Test state
PRINTER OFF ; .. toggle
ELSE PRINTER ON
GOTO Loop ; And continue
;
; Toggle the blank line eater
;
Blnkln:
IF STRCMP "_BSUP" "ON " ; Test current setting
SET BSUPPRESS OFF ; .. toggle
ELSE SET BSUPPRESS ON ; .. toggle
GOTO Loop ; And continue
;
; Toggle the log function
;
Log:
IF STRCMP "_LOGG" "OFF"
S1 = "Enter the transcript file name:"
GOSUB Ask_File ; Get script file name
IF NOT SUCCESS or NULL S0 ; IF ESC'd out
GOTO Loop
ENDIF
LOG OPEN S0
ELSE
LOG CLOSE
ENDIF
GOTO Loop ; Set-up the line to add to output
;
; Toggle the log hold function
;
LogHold:
IF STRCMP "_LOGG" "OFF" ; If not logging
GOTO Loop
ENDIF
IF STRCMP "_LOGH" "OFF"
LOG SUSPEND
ELSE LOG RESUME
GOTO Loop ; Set-up the line to add to output
;
; ----- Subroutine: Ask for a script file name
; S1 passes the prompt used
; SUCCESS returns fact script file successfully opened
; S0 returns the fname
;
Ask_File:
WOPEN 10 10 13 70 (contrast) ASK_ESC
ATSAY 10 12 (contrast) " TALKER Fname "
ATSAY 11 12 (contrast) S1(0:56)
ATSAY 13 30 (contrast) " Press ESC to cancel "
ATGET 12 12 (contrast) 54 S0; Read new fname
WCLOSE
;
; Attempt to execute the entry
;
LJ S0 ; Left justify
S0 = S0 &"" ; Trim spaces
UPPER S0 ; Make pretty
IF NOT NULL S0 ; If nothing entered
SET SUCCESS ON
ELSE
SET SUCCESS OFF
ENDIF
RETURN ; And done
;
; ----- Escape during a subwindow
; .. S0 is returned null
;
Ask_Esc:
S0 = "" ; Make a null return
RETURN
;
; ----- Subroutine: Ask a question and take a y/n answer
; S0 passes the text to be displayed
; SUCCESS returns fact of y/n
;
Ask_YN:
WOPEN 10 10 13 70 (contrast) ASK_ESC
ATSAY 10 12 (contrast) " Talker Y/N "
ATSAY 11 12 (contrast) S0(0:55)
ATSAY 13 30 (contrast) " CR or ESC to exit "
ATGET 12 12 (contrast) 1 S0 ; Read y/n
WCLOSE
;
; Interperet the response
;
IF NULL S0 or FIND S0 "Y" ; If c/r yes
SET SUCCESS ON
ELSE
SET SUCCESS OFF
ENDIF
RETURN ; And done
;
; --